/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vista.personas.pacientes;

import geografia.Localidad;
import modelo.personas.pacientes.Paciente;
import modelo.personas.pacientes.GestorPaciente;
import java.awt.event.WindowAdapter;
import java.util.Iterator;
import java.util.List;
import vista.GestorVistaABMPnl;

/**
 *
 * @author Raul
 */
public class GestorVistaPacientesPnl extends GestorVistaABMPnl {
    
    private PacientesPnl formulario;
    private String titulo="Pacientes";
    private GestorPaciente gestorModelo = new GestorPaciente();
    private String icono="/resources/patient_16.png";
    private String reporte = "/vista/personas/pacientes/ReportePacientes.jasper";

    public GestorVistaPacientesPnl() {
        
    }

    @Override
    public PacientesPnl getFormulario() {
        return formulario;
    }

    public void setFormulario(PacientesPnl formulario) {
        this.formulario = formulario;
    }

    @Override
    public String getTitulo() {
        return titulo;
    }    
    
    @Override
    public GestorPaciente getGestorModelo() {
        return gestorModelo;
    }

    public void setGestorModelo(GestorPaciente gestorModelo) {
        this.gestorModelo = gestorModelo;
    }

    @Override
    public void abrirFormulario() {
        setFormulario(new PacientesPnl(this));
        inicializarVista();
    }
    
    @Override
    public String getIcono() {
        return icono;
    }

    public void setIcono(String icono) {
        this.icono = icono;
    }
    
    @Override
    public void registrarNuevaEntidad() {
        GestorVistaPacienteDlg gestorEditor = new GestorVistaPacienteDlg();
        gestorEditor.abrirFormulario();
        gestorEditor.getFormulario().addWindowListener(new MyWindowListener());
    }

    @Override
    public void modificar(Object modelo) {
        GestorVistaPacienteDlg gestorEditor = new GestorVistaPacienteDlg((Paciente) modelo);
        gestorEditor.abrirFormulario();
        //detectar cierre del formulario de edicion
        gestorEditor.getFormulario().addWindowListener(new MyWindowListener());
    }

    @Override
    public void eliminar(Object modelo) {
        gestorModelo.setModelo((Paciente) modelo);
        gestorModelo.eliminar();
    }
    
    /**inicializa los componentes de esta vista*/
    public void inicializarVista() {
        cargarModeloComponente();
        getFormulario().cargarComboProvincia(gestorModelo.listarProvincias());
    }
    
    @Override
    public int mostrarDialogoDeEliminacion(){
        return super.mostrarDialogoDeEliminacion(formulario,
                "Esta seguro que desea eliminar\n"
                + " el paciente seleccionado?" );
    }

    @Override
    public void cargarModeloComponente(){
        Object[] titulos={ "", "Nro H.C.","Nombre", "Apellido", "Documento", "Domicilio", "Sexo"};
        getFormulario().cargarTitulosTabla(titulos);
    }
    
    @Override
    public void cargarDatos(java.util.Collection datos){
        Iterator i=datos.iterator();
        while(i.hasNext()){
            Paciente p = (Paciente)i.next();
            Object[] fila={p,
                p.getHistoriaClinica().getNumero(),
                p.getNombre(),
                p.getApellido(),
                p.getDocumento(),
                p.getDomicilios().iterator().next(),
                p.getSexo()};
            getFormulario().agregarFilaTabla(fila);
        }
    }

    @Override
    public void imprimir(List datos) {
        super.mostrarReporte(reporte,
                "Listado De Pacientes",
                datos);
    }

    void buscarLocalidad(Integer codigoPostal) {
        List<Localidad> localidades = gestorModelo.buscarLocalidad(codigoPostal);
        if (!localidades.isEmpty()) {
            setearLocalidadEnVista(localidades.get(0));
        }
    }

    void cargarLocalidades(Object provincia) {
        getFormulario().cargarComboLocalidad(gestorModelo.buscarLocalidad(provincia.toString()));
    }

    private void setearLocalidadEnVista(Localidad localidad) {
        getFormulario().getCodigoPostalTxt().setValue(localidad.getCodigoPostal());
        getFormulario().getProvinciaCmb().setSelectedItem(localidad.getProvincia());
        getFormulario().getLocalidadCmb().setSelectedItem(localidad);
    }
    
    class MyWindowListener extends WindowAdapter {
        @Override
        public void windowClosed(java.awt.event.WindowEvent e){
////            cargarModeloComponente();
            getFormulario().actualizarTabla();
        }
    }
    
    public void listarTodos(){
        super.mostrarReporte(reporte,
                "Listado De Pacientes",
                gestorModelo.listarPacientes());
    }

}